package com.ldk.base.framework.util;

import java.math.BigDecimal;

import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class ConvertUtil {

	/**
	 * 日志
	 */
	private static final Logger logger = LoggerFactory.getLogger(ConvertUtil.class);
	
	/**
	 * 对象转化为整形，默认返回0
	 * @param value
	 * @return
	 */
	public static int parseInt(Object value){
		return parseInt(value, 0);
	}
	/**
	 * 对象转化为整形，默认返回0
	 * @param value
	 * @param defaultValue
	 * @return
	 */
	public static int parseInt(Object value, int defaultValue){
		String strValue = String.valueOf(value);
		try{
			if(!RegexUtil.isNumber(strValue)){
				strValue = String.valueOf(defaultValue);
			}
			else{
				strValue = String.valueOf(value);
			}
		}catch(Exception e){
			strValue = String.valueOf(defaultValue);
		}
		if(strValue == null || strValue == "" ||  strValue.trim().length() < 1)
			strValue = String.valueOf(defaultValue);
		try{
			Double doubleValue = java.lang.Double.parseDouble(strValue);
			return doubleValue.intValue();
		}
		catch(Exception e){
			logger.error(e.getMessage());
		}
		return defaultValue;
	}
	
	/**
	 * 对象转化为长整形,默认返回0
	 * @param value
	 * @return
	 */
	public static long parseLong(Object value){
		return parseLong(value, 0L);
	}
	
	/**
	 * 对象转化为长整形,默认返回0
	 * @param value
	 * @param defaultValue
	 * @return
	 */
	public static long parseLong(Object value, long defaultValue){
		String strValue = String.valueOf(value);
		try{
			if(!RegexUtil.isNumber(strValue)){
				strValue = String.valueOf(defaultValue);
			}
			else{
				strValue = String.valueOf(value);
			}
		}catch(Exception e){
			strValue = String.valueOf(defaultValue);
		}
		if(strValue == null || strValue == "" ||  strValue.trim().length() < 1)
			strValue = String.valueOf(defaultValue);
		try{

			Double doubleValue = java.lang.Double.parseDouble(strValue);
			return doubleValue.longValue();
			
		}catch(Exception e){
			logger.error(e.getMessage());
		}
		return defaultValue;
	}
	
	/**
	 * 对象转化为Float,默认返回0
	 * @param value
	 * @return
	 */
	public static float parseFloat(Object value){
		return parseFloat(value, 0f);
	}
	
	/**
	 * 对象转化为Float,默认返回0
	 * @param value
	 * @param defaultValue
	 * @return
	 */
	public static float parseFloat(Object value, float defaultValue){
		String strValue = String.valueOf(value);
		try{
			if(!RegexUtil.isNumber(strValue)){
				strValue = String.valueOf(defaultValue);
			}
			else{
				strValue = String.valueOf(value);
			}
		}catch(Exception e){
			strValue = String.valueOf(defaultValue);
		}
		if(strValue == null || strValue == "" ||  strValue.trim().length() < 1)
			strValue = String.valueOf(defaultValue);
		try{

			Double doubleValue = java.lang.Double.parseDouble(strValue);
			return doubleValue.floatValue();
			
		}catch(Exception e){
			logger.error(e.getMessage());
		}
		return defaultValue;
	}
	
	/**
	 * 对象转化为Double,默认返回0
	 * @param value
	 * @return
	 */
	public static double parseDouble(Object value){
		return parseDouble(value, 0);
	}
	
	/**
	 * 对象转化为Double,默认返回0
	 * @param value
	 * @param defaultValue
	 * @return
	 */
	public static double parseDouble(Object value, double defaultValue){
		String strValue = String.valueOf(value);
		try{
			if(!RegexUtil.isNumber(strValue)){
				strValue = String.valueOf(defaultValue);
			}
			else{
				strValue = String.valueOf(value);
			}
		}catch(Exception e){
			strValue = String.valueOf(defaultValue);
		}
		if(strValue == null || strValue == "" ||  strValue.trim().length() < 1)
			strValue = String.valueOf(defaultValue);
		try{
			return java.lang.Double.parseDouble(strValue);
			
		}catch(Exception e){
			logger.error(e.getMessage());
		}
		return defaultValue;
	}
	
	/**
	 * 保留2位有效数字
	 * @param value
	 * @return
	 */
	public static double toFiexd(Object value){
		String strValue = "0.00";
		if(value != null){
			strValue = String.valueOf(value);
		}
		BigDecimal bd = new BigDecimal(strValue);
		bd.setScale(2, BigDecimal.ROUND_HALF_UP);
		
		return bd.doubleValue();
	}
	
	/**
	 * 四舍五入并保留2位有效数字
	 * @param value
	 * @return
	 */
	public static double toRoundFiexd(double value){
		double result = 0;
		double temp = Math.pow(10, 2);
		result = Math.round(value * temp) / temp;
		return result;
	}
	
	/**
	 * 对象转化为Boolean
	 * @param value
	 * @param defaultValue
	 * @return
	 */
	public static Boolean parseBoolean(Object value){
		if(value == null){
			return false;
		}
		String strValue = String.valueOf(value);
		if(StringUtils.isBlank(strValue) || 
		   "false".equalsIgnoreCase(strValue) ||
		   "no".equalsIgnoreCase(strValue))
			return false;
		if("yes".equalsIgnoreCase(strValue) ||
		   "true".equalsIgnoreCase(strValue))
			return true;
		return Boolean.parseBoolean(strValue);
	}
	/**
	 * 转换为字符串
	 * @param value
	 * @return
	 */
	public static String parseString(Object value){
		if(value == null) return "";
		return String.valueOf(value);
	}
	
}
